package com.zm.oes.mapper;

import com.zm.oes.entity.Replay;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * 回复replay Mapper层
 */
@Mapper
public interface ReplayMapper {

    /**
     * 使用 @Select 注解标记，表示这是一个查询操作
     * 查询所有回复信息
     * 返回类型为回复对象列表
     */
    @Select("select messageId,replayId,replay,replayTime from replay")
    List<Replay> findAll();

    /**
     * 使用 @Select 注解标记，表示这是一个查询操作
     * 根据消息ID查询相关的所有回复信息
     * 方法的参数为消息ID，返回类型为回复对象列表
     */
    @Select("select messageId,replayId,replay,replayTime from replay where messageId = #{messageId}")
    List<Replay> findAllById(Integer messageId);

    /**
     * 使用 @Select 注解标记，表示这是一个查询操作
     * 根据回复ID查询对应的回复信息
     * 方法的参数为回复ID，返回类型为单个回复对象
     */
    @Select("select messageId,replayId,replay,replayTime from replay where messageId = #{messageId}")
    Replay findById(Integer messageId);

    /**
     * 使用 @Delete 注解标记，表示这是一个删除操作
     * 根据回复ID删除对应的回复信息
     * 方法的参数为回复ID，返回类型为操作结果的整数
     */
    @Delete("delete from replay where replayId = #{replayId}")
    int delete(Integer replayId);

    /**
     * 使用 @Update 注解标记，表示这是一个更新操作
     * 根据回复ID更新回复的标题、内容和回复时间
     * 方法的参数为一个回复对象，包含了更新后的信息
     * 返回类型为操作结果的整数
     */
    @Update("update replay set title = #{title}, replay = #{replay}, replayTime = #{replayTime} where replayId = #{replayId}")
    int update(Replay replay);

    /**
     * 使用 @Insert 注解标记，表示这是一个插入操作
     * 向回复表中插入一条新的回复信息
     * 方法的参数为一个回复对象，包含了待插入的回复信息
     * 返回类型为操作结果的整数，并且使用 @Options 注解指定了使用自动生成的主键，并将自动生成的主键值设置到 keyProperty 指定的属性中
     */
    @Options(useGeneratedKeys = true,keyProperty = "replayId")
    @Insert("insert into replay(messageId,replay,replayTime) values(#{messageId}, #{replay},#{replayTime})")
    int add(Replay replay);
}
